#!/usr/bin/env python3
"""
多样本位置检验MCP服务使用示例

本文件展示如何使用各种检验方法的实际案例
"""

import json
import sys
import os

# 添加当前目录到Python路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

from server import MultiSampleApproximationTests

def example_drug_efficacy_study():
    """示例1：药物疗效研究 - Kruskal-Wallis检验"""
    print("\n=== 示例1：药物疗效研究 ===")
    print("研究问题：比较三种不同剂量药物的疗效")
    
    # 三组患者的疗效评分（0-100分）
    low_dose = [45, 48, 52, 55, 58, 62, 65, 68, 70, 72, 75]      # 低剂量组
    medium_dose = [55, 58, 62, 65, 68, 72, 75, 78, 80, 82, 85]  # 中剂量组
    high_dose = [65, 68, 72, 75, 78, 82, 85, 88, 90, 92, 95]    # 高剂量组
    
    data_groups = [low_dose, medium_dose, high_dose]
    
    result = MultiSampleApproximationTests.kruskal_wallis_approximation(data_groups, alpha=0.05)
    
    print(f"检验结果：{result['conclusion']}")
    print(f"p值：{result['p_value']:.4f}")
    print(f"统计量：{result['statistic']:.4f}")
    
    if result['reject_null_hypothesis']:
        print("结论：不同剂量的药物疗效存在显著差异")
    else:
        print("结论：不同剂量的药物疗效无显著差异")

def example_dose_response_study():
    """示例2：剂量-反应关系研究 - Jonckheere-Terpstra检验"""
    print("\n=== 示例2：剂量-反应关系研究 ===")
    print("研究问题：检验药物剂量与反应强度是否存在单调趋势")
    
    # 四个剂量组的反应强度（按剂量递增排列）
    dose_0mg = [20, 22, 25, 28, 30, 32, 35, 38, 40, 42, 45]     # 安慰剂组
    dose_10mg = [35, 38, 40, 42, 45, 48, 50, 52, 55, 58, 60]   # 10mg组
    dose_20mg = [50, 52, 55, 58, 60, 62, 65, 68, 70, 72, 75]   # 20mg组
    dose_30mg = [65, 68, 70, 72, 75, 78, 80, 82, 85, 88, 90]   # 30mg组
    
    data_groups = [dose_0mg, dose_10mg, dose_20mg, dose_30mg]
    
    result = MultiSampleApproximationTests.jonckheere_terpstra_approximation(data_groups, alpha=0.05)
    
    print(f"检验结果：{result['conclusion']}")
    print(f"p值：{result['p_value']:.4f}")
    print(f"标准化统计量：{result['standardized_statistic']:.4f}")
    
    if result['reject_null_hypothesis']:
        print("结论：存在显著的剂量-反应单调趋势")
    else:
        print("结论：不存在显著的剂量-反应单调趋势")

def example_repeated_measures_study():
    """示例3：重复测量研究 - Friedman检验"""
    print("\n=== 示例3：重复测量研究 ===")
    print("研究问题：比较四种治疗方法在同一组患者中的效果")
    
    # 12名患者接受四种治疗的效果评分
    data_matrix = [
        [75, 78, 82, 85],   # 患者1
        [68, 72, 76, 80],   # 患者2
        [82, 85, 88, 92],   # 患者3
        [70, 74, 78, 82],   # 患者4
        [78, 81, 85, 88],   # 患者5
        [72, 76, 80, 84],   # 患者6
        [80, 83, 87, 90],   # 患者7
        [74, 78, 82, 86],   # 患者8
        [76, 80, 84, 88],   # 患者9
        [69, 73, 77, 81],   # 患者10
        [83, 86, 90, 93],   # 患者11
        [71, 75, 79, 83]    # 患者12
    ]
    
    result = MultiSampleApproximationTests.friedman_approximation(data_matrix, alpha=0.05)
    
    print(f"检验结果：{result['conclusion']}")
    print(f"p值：{result['p_value']:.4f}")
    print(f"统计量：{result['statistic']:.4f}")
    
    if result['reject_null_hypothesis']:
        print("结论：四种治疗方法的效果存在显著差异")
    else:
        print("结论：四种治疗方法的效果无显著差异")

def example_rater_agreement_study():
    """示例4：评价者一致性研究 - Kendall协同系数检验"""
    print("\n=== 示例4：评价者一致性研究 ===")
    print("研究问题：检验五名专家对十个产品质量评价的一致性")
    
    # 10个产品，5名专家的评分（1-10分）
    data_matrix = [
        [8.5, 8.2, 8.8, 8.6, 8.4],  # 产品1
        [7.2, 7.5, 7.8, 7.4, 7.1],  # 产品2
        [9.1, 9.3, 9.5, 9.2, 9.0],  # 产品3
        [6.8, 7.1, 7.3, 7.0, 6.9],  # 产品4
        [8.8, 8.6, 9.0, 8.7, 8.5],  # 产品5
        [7.5, 7.8, 8.0, 7.7, 7.6],  # 产品6
        [9.2, 9.0, 9.4, 9.1, 8.9],  # 产品7
        [6.5, 6.8, 7.0, 6.7, 6.6],  # 产品8
        [8.0, 8.3, 8.5, 8.2, 8.1],  # 产品9
        [7.8, 8.1, 8.3, 8.0, 7.9]   # 产品10
    ]
    
    result = MultiSampleApproximationTests.kendall_coefficient_concordance(data_matrix, alpha=0.05)
    
    print(f"检验结果：{result['conclusion']}")
    print(f"协同系数W：{result['concordance_coefficient']:.4f}")
    print(f"p值：{result['p_value']:.4f}")
    
    if result['reject_null_hypothesis']:
        print("结论：专家评价存在显著一致性")
    else:
        print("结论：专家评价不存在显著一致性")

def example_binary_outcome_study():
    """示例5：二分类结果研究 - Cochran Q检验"""
    print("\n=== 示例5：二分类结果研究 ===")
    print("研究问题：比较四种诊断方法在同一组患者中的阳性检出率")
    
    # 12名患者，四种诊断方法的结果（1=阳性，0=阴性）
    data_matrix = [
        [1, 1, 1, 1],  # 患者1
        [0, 0, 1, 0],  # 患者2
        [1, 1, 1, 1],  # 患者3
        [0, 1, 1, 1],  # 患者4
        [1, 0, 1, 1],  # 患者5
        [0, 0, 0, 1],  # 患者6
        [1, 1, 1, 1],  # 患者7
        [1, 1, 1, 0],  # 患者8
        [0, 1, 1, 1],  # 患者9
        [1, 0, 1, 1],  # 患者10
        [0, 0, 1, 0],  # 患者11
        [1, 1, 1, 1]   # 患者12
    ]
    
    result = MultiSampleApproximationTests.cochran_q_test(data_matrix, alpha=0.05)
    
    print(f"检验结果：{result['conclusion']}")
    print(f"p值：{result['p_value']:.4f}")
    print(f"统计量：{result['statistic']:.4f}")
    print(f"各方法阳性检出数：{result['treatment_sums']}")
    
    if result['reject_null_hypothesis']:
        print("结论：四种诊断方法的阳性检出率存在显著差异")
    else:
        print("结论：四种诊断方法的阳性检出率无显著差异")

def example_trend_analysis():
    """示例6：趋势分析 - Page检验"""
    print("\n=== 示例6：趋势分析 ===")
    print("研究问题：检验四个时间点的治疗效果是否呈递增趋势")
    
    # 10名患者在四个时间点的治疗效果评分
    data_matrix = [
        [65, 70, 75, 80],  # 患者1
        [58, 63, 68, 73],  # 患者2
        [72, 77, 82, 87],  # 患者3
        [60, 65, 70, 75],  # 患者4
        [68, 73, 78, 83],  # 患者5
        [62, 67, 72, 77],  # 患者6
        [70, 75, 80, 85],  # 患者7
        [64, 69, 74, 79],  # 患者8
        [66, 71, 76, 81],  # 患者9
        [59, 64, 69, 74]   # 患者10
    ]
    
    result = MultiSampleApproximationTests.page_test(data_matrix, alpha=0.05)
    
    print(f"检验结果：{result['conclusion']}")
    print(f"p值：{result['p_value']:.4f}")
    print(f"标准化统计量：{result['standardized_statistic']:.4f}")
    
    if result['reject_null_hypothesis']:
        print("结论：治疗效果存在显著的递增趋势")
    else:
        print("结论：治疗效果不存在显著的递增趋势")

def example_auto_selection():
    """示例7：自动选择检验方法"""
    print("\n=== 示例7：自动选择检验方法 ===")
    
    # 场景1：独立设计，连续数据，无顺序
    print("\n--- 场景1：三组独立样本比较 ---")
    group1 = [45, 48, 52, 55, 58, 62, 65, 68, 70, 72, 75]
    group2 = [55, 58, 62, 65, 68, 72, 75, 78, 80, 82, 85]
    group3 = [65, 68, 72, 75, 78, 82, 85, 88, 90, 92, 95]
    
    result = MultiSampleApproximationTests.auto_select_test(
        data_groups=[group1, group2, group3],
        design_type="independent",
        data_type="continuous",
        has_order=False
    )
    
    print(f"自动选择的检验：{result['test_name']}")
    print(f"检验结果：{result['conclusion']}")
    
    # 场景2：配对设计，二分类数据
    print("\n--- 场景2：配对设计二分类数据 ---")
    binary_data = [
        [1, 0, 1, 1],
        [0, 1, 1, 0],
        [1, 1, 1, 1],
        [0, 0, 1, 0],
        [1, 1, 1, 1],
        [0, 1, 0, 1],
        [1, 0, 1, 1],
        [1, 1, 1, 0],
        [0, 0, 1, 1]
    ]
    
    result = MultiSampleApproximationTests.auto_select_test(
        data_matrix=binary_data,
        design_type="paired",
        data_type="binary",
        has_order=False
    )
    
    print(f"自动选择的检验：{result['test_name']}")
    print(f"检验结果：{result['conclusion']}")

def main():
    """运行所有示例"""
    print("多样本位置检验MCP服务使用示例")
    print("=" * 60)
    
    example_drug_efficacy_study()
    example_dose_response_study()
    example_repeated_measures_study()
    example_rater_agreement_study()
    example_binary_outcome_study()
    example_trend_analysis()
    example_auto_selection()
    
    print("\n" + "=" * 60)
    print("所有示例演示完成！")
    print("\n使用建议：")
    print("1. 独立设计：使用Kruskal-Wallis或Jonckheere-Terpstra检验")
    print("2. 配对设计：使用Friedman、Page或Cochran Q检验")
    print("3. 评价者一致性：使用Kendall协同系数检验")
    print("4. 不完全区组设计：使用Durbin检验")
    print("5. 不确定时：使用auto_select_test自动选择")

if __name__ == "__main__":
    main()